内存管理概念
内存管理的概念
- 内存管理:操作系统对内存的换分和动态规划称为内存管理
内存管理的功能
- 内存空间的分配与回收
- 地址转换
- 内存空间扩展
- 存储保护
进程运行的基本原理
- 程序装入与链接
- 编译:将源代码编译成目标模块
- 链接:将目标模块和库函数链接成装入模块
- 静态链接
- 装入时动态链接
- 运行时动态链接
- 装入:将装入模块装入内存运行
- 绝对装入:程序逻辑地址和实际内存地址相同
- 可重定位装入(静态重定位):装入模块装入内存时,进行重定位(地址转换)
- 动态运行时装入(动态重定位):地址转换在程序执行时进行
- 逻辑地址空间和物理地址空间
- 相对地址:目标模块从0号单元开始编址,相对该地址的地址即为相对地址
- 逻辑地址:内存中物理单元的集合称为逻辑地址空间,它是地址转换的最终地址
- 地址重定位:逻辑地址转换为物理地址
- 内存保护
- 重定位寄存器
- 界地址寄存器
- 程序装入与链接
覆盖和交换
- 覆盖
将用户空间分成固定区和覆盖区,固定区存放活跃的部分,覆盖区存放即将访的段,其它段存放在外存。覆盖用于一个进程或进程中,覆盖技术对程序员不透明,已成历史。 - 交换
将处于等待状态的进程序从内存移到辅存称为换出,将准备好竞争CPU运行的程序从辅存移到内存称为换入。交换技术用于不同进程之间
连续分配管理方式
连续分配方式指为一个程序分配一个连续的内存空间。
- 单一连续分配
内存分为系统区和用户区,系统区给操作系统使用,用户区给一道用户程序使用,只能用在单任务操作系统中 固定分区分配
用户空间划分为若干个固定大小的区域,每个分区只装入一道程序。分区有等大小分区和不等大小分区。固定分区有内部碎片动态分区分配
动态分区分配又称为可变分区分配。在进程装入内存时,根据进程大小动态建立分区。动态分区分配会造成外部碎片。
动态分区分配策略:- 首次适应算法(First Fit)
- 最佳适应(Best Fit)
- 最坏适应(Worst Fit)
- 邻近适应(Next Fit)
非连续分配管理方式
1 | 非连续分配指一个程序分散地装入到不相邻的内存分区中。 |
基本分页存储管理方式
将主存空间划分为大小相等的块,进程执行时,以块为单位申请块空间。
分页管理不会产生外部碎片,每个进程平均产生半个块大小的内部碎片(页内碎片)- 分页存储的基本概念
- 页面:进程中的块称为页,内存中的块称为页框,在外存的称为块
- 地址结构:
|31 … 12|11 … 0|
|—-|—-|
|页号P|页内偏移量W| - 页表:页表在内存中,用于建立进程页号到内存中物理块号的地址映射
- 基本地址变换机构: 将逻辑地址转换为物理地址
- 具有块表的地址变换机构
- 二级页表
- 分页存储的基本概念
基本分段存储管理方式
- 分段
- 段表
- 地址变换机构
- 段的共享与保护
- 段页式管理方式
虚拟内存管理
虚拟内存管理的基本概念
- 传统存储管理方式特征
- 一次性:作业要一次全部装入内存后才能运行
- 驻留性:作业装入内存后,一直驻留在内存中
- 局部性原理
- 时间局部性:
- 空间局部性:
- 虚拟存储器定义和特征
虚拟存储器指具有请求调入功能和置换功能,能从逻辑上对内存容量就那些扩展的一种存储系统。
主要特征:- 多次性:允许作业分多次调入内存运行
- 对换性:允许作业进行换入和换出
- 虚拟性:逻辑容量=内存容量+外存容量
- 虚拟存储技术的实现
实现方式:- 请求分页存储管理
- 请求分段存储管理
- 请求段页式存储管理
硬件支持: - 内存和外存
- 中断机构
- 地址变换机构
- 页(段)表机制
请求分页管理方式
- 页表机制
页表项:- 页号
- 物理块号
- 状态位P:标记该页是否已调入内存
- 访问字段A:记录本页的访问次数
- 修改位M:标志该页调入内存后是否被修改
- 外存地址: 该页的外存地址
- 缺页中断机构
- 在指令执行期间发生,属于内部中断
- 一条指令执行期间可能发生多次缺页中断
- 地址变换机构
地址变换时先检索快表:- 如果在块表中找到对应页,修改页表项的访问位,利用页表项的物理块号和页内地址形成物理地址。
- 如果找不到,则检索内存中的页表,找到对应页号,查看页表项中的状态位P,若该页未调入内存,则产生缺页中断,请求从外存中把该页调入内存。
页面置换算法
进程运行时,若其访问的页面不在内存中,且内存已经没有足够空间,则要从内存中换出页面,选择调出页面的算法称为页面置换算法。
- 最佳置换算法(OPT):调出最长时间内不再使用的页面
- 先进先出页面置换算法(FIFO):调出最早调入的页面会产生Belady异常(分配物理块数增大而缺页次数反而增加)
- 最近最久未使用置换算法(LRU):
- 时钟置换算法(CLOCK)或最近未用算法(NRU):调入的页面使用位初始值设为1并形成一个循环,指针指向第一个页面。每次调换时从指针处开始扫描循环,若使用位为1则置为0,指针后移;若使用位为0,则置换该页面,指针后移。
页面分配策略
- 置换策略
固定/可变分配:考虑进程分配的物理块是否是固定的
局部/全局置换:考虑是只在进程内部置换还是可以使用其他物理块
组合策略有:- 固定分配局部置换
- 可变分配全局置换
- 可变分配局部置换
- 因为固定分配限制进程的可用物理块所有没有固定分配全局置换
- 调入页面时机
- 预调页策略:运行前调页,由程序员指定调页策略
- 请求调页策略:运行期间调页
- 从何处调入页面
文件区存放文件,采用离散分配;对换区存放对换页面,采用连续分配- 从对换区调入
- 从文件区调入
抖动
抖动是指频繁的页面调度行为
工作集
工作集(驻留集)指某段时间间隔内,进程要访问的页面集合,合理选择工作集大小可以防止抖动现象